@贝壳儿
2年前 提问
1个回答

CRLF注入原理是什么?

齐士忠
2年前

CRLF注入又叫HTTP响应拆分/截断(HTTP Response Splitting)简称HRS。HRS漏洞存在的前提是 :url当中输入的字符会影响到文件,比如在重定位当中可以尝试使用%0d%0a作为CRLF。一般网站会在HTTP头中加上Location: http://baidu.com的方式来进行302跳转,所以我们能控制的内容就是Location:后面的XXX网址,对这个地址进行污染。

假设服务端(PHP)的处理方式:

if($_COOKIE("security_level") == 1)
{
    header("Location: ". $_GET['url']);
    exit;
}

代码意思是说当条件满足时,将请求包中的url参数值拼接到Location字符串中,并设置成响应头发送给客户端。

此时服务器端接收到的url参数值是我们修改后的:

http://baidu.com/xxx%0a%0dSet-Cookie: test123=123

在url参数值拼接到Location字符串中,设置成响应头后,响应头就会看到:

Set-Cookie: test123=123

要避免http响应截断,需要注意以下几点:

  • 对用户的数据进行合法性校验,对特殊的字符进行编码,如<、>、’、”、CR、LF等,限制用户输入的CR和LF,或者对CR和LF字符正确编码后再输出,以防止注入自定义HTTP头。

  • 创建安全字符白名单,只接受白名单中的字符出现在HTTP响应头文件中。

  • 在将数据传送到http响应头之前,删除所有的换行符。